<?php
/**
 * Контроллер административной панели, реализующий браузер ресурсов сайта
 * 
 * @category Phorm
 * @package Controller_Module_Control
 * @name /Phorm/Controller/Module/Control/Browser.php
 * @copyright phorm.ru
 * @since 07.02.2011
 * @author vladimir@kachalov.net
 */

class Phorm_Controller_Module_Control_Browser extends Phorm_Controller_Controller {
	
	/**
	 * Экземпляр класса материалов сайта
	 * @var Phorm_Resource
	 */
	public $Resource;
	
	
	/**
	 * Предиспетчер
	 * 
	 * @return void
	 */
		
	public function preDispatch() {
		
		//$this->Resource = new Phorm_Resource();
		
	}
	
	
	/**
	 * Браузер материалов сайта
	 * 
	 * @return void
	 */
		
	public function resourcesAction() {
		
		$this->Resource = new Phorm_Resource();
		
		$options = Phorm_Config::xml('grids/control/browser.xml','resources');
		
		if($this->_request->isXmlHttpRequest()) {
			
			$categories = $this->Resource->getCategoriesPathsByModule();
			
			foreach ($categories as $category) {
				$options['headings']['categoryid']['optiondata'][] = 
					array('categoryid' => $category['categoryid'],
						  'categoryname' => str_repeat('&nbsp;',$category['clevel']*3).$category['categoryname']);
			}

			//$options['headings']['categoryid']['optiondata'] = $this->Resource->getCategoriesListByModule();
			//$options['headings']['categoryid']['optiondata'] = $categories;

			$rows = $this->Resource->getResourcesList($this->_params);
			$paginator = $this->Resource->getPaginator();
			$this->_helper->json(Phorm_JQuery_DataGrid::data($rows,$paginator,$options));
			
		} else {
			
			$this->view->assign('ResourcesDataTable',$this->view->DataGrid('ResourcesDataTable',$options));
			
		}
						
	}
	
	
	/**
	 * Файловый менеджер
	 * 
	 * @return void
	 */
		
	public function filesAction() {
		
		/**
		 * При Ajax и POST - запросах инициализируем PHP-коннектор
		 */
		
		if($this->_request->isXmlHttpRequest() || $this->_request->isPost()) {
			
			error_reporting(0);
			
			/**
			 * Основные опции
			 */
			
			$opts = array(
				'root' => DOCUMENT_PATH . '/uploads/files/',
				'URL' => '/uploads/files/',
				'tmbDir' => '.tmb',
				'tmbCrop' => false,
				'tmbCleanProb' => 50 // 25% вероятность обновления тумбочек
			);
			
			/**
			 * Инициализация elFinder
			 */
			
			require_once 'Phorm/Plugin/Elfinder/elFinder.class.php';

			$connector = new elFinder($opts);
			$connector->run();
			
		/**
		 * При GET-запросах инициализируем JS-библиотеку
		 */
			
		} else {
			
			/**
			 * Подключаем файлы стилей и скриптов
			 */
			
			$this->_boot->jquery->addJavascriptFile($this->view->BaseUrl() . '/ui/elfinder/js/elfinder.min.js');
			$this->_boot->jquery->addJavascriptFile($this->view->BaseUrl() . '/ui/elfinder/js/i18n/elfinder.ru.js');
			$this->_boot->jquery->addStylesheet($this->view->BaseUrl() . '/ui/elfinder/css/elfinder.css');
			
			/**
			 * Основные опции
			 */
			
			$opts = array(
				'lang' => 'ru',
				'url' => $this->view->siteUrl() . '/control/browser/files/',
				'places' => $this->_translate->_(''),
				'cssClass' => 'ui-widget-content ui-corner-all',
				'closeOnEditorCallback' => false
			);
			
			$opts = ZendX_JQuery::encodeJson($opts);
			
			/**
			 * Опции для вставки в различные редакторы
			 */
			
			$editorCallback = '';
			
			if(isset($this->_params['for']) && isset($this->_params['selector'])) {
				
				switch ($this->_params['for']) {
					
					case 'markitup':
						
						$js = 'function(url){
							return phorm_ui_selectFileForMarkitup("'.$this->view->escape($this->_params['selector']).'",url);
						}';
						$opts = substr($opts,0,-1).',editorCallback: '.$js.'}';
						
						break;
						
					case 'tinymce':
						
						$this->_boot->jquery->addJavascriptFile($this->view->BaseUrl() . '/ui/tinymce/tiny_mce_popup.js');
						
						$js = 'function(url){
							return phorm_ui_selectFileForTinyMCE("'.$this->view->escape($this->_params['selector']).'",url);
						}';
						$opts = substr($opts,0,-1).',editorCallback: '.$js.'}';
						
						break;
					
				}
				
			}
			
			/**
			 * Инициализация JS elFinder
			 */
			
			$elementid = 'filemanager';
			$this->_boot->jquery->addOnload('$("#'.$elementid.'").elfinder('.$opts.').ready(function(){ phorm_ui_correctElfinder(this); })');
			
			$this->view->assign('FileManager','<div id="'.$elementid.'"></div>');
			
		}
						
	}
	
}